package com.jpa.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import com.jpa.domain.User;
import com.jpa.repository.custom.UserRepositoryCustom;

/**
 * @Description 用户 Dao 层
 *
 * @author 堆堆堆
 * @date 2018年4月19日 下午12:18:25
 */
public interface UserRepository extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User>, UserRepositoryCustom {

	/**
	 * @Description 根据用户名模糊查询实体
	 *
	 * @param userName
	 * @return
	 */
	User findByUserNameLike(String userName);

	/**
	 * @Description JPQL 语法，根据 id 修改 userName
	 *
	 * @param userName
	 * @param id
	 * @return
	 */
	// 执行 UPDATE 或 DELETE 操作，需要加此注解
	@Modifying
	@Query("update User user set user.userName=:userName where user.id=:id")
	int setUserName(@Param("userName") String userName, @Param("id") Integer id);

	/**
	 * @Description SQL 语法，需要加 nativeQuery = true，根据 id 修改 age
	 *
	 * @param userName
	 * @param id
	 * @return
	 */
	// 执行 UPDATE 或 DELETE 操作，需要加此注解
	@Modifying
	@Query(value = "update t_user user set user.age=:age where user.id=:id", nativeQuery = true)
	int setUserAge(@Param("age") Integer age, @Param("id") Integer id);

}
